package cn.buk.tms.eotms.service;

import cn.buk.common.JsonResult;
import cn.buk.common.dto.CommonDto;
import cn.buk.tms.eotms.request.FlightOrderRequestDto;
import cn.buk.tms.eotms.response.FlightOrderResponseDto;
import cn.buk.tms.eotms.sc.SearchFlightOrderCriteria;
import cn.buk.tms.exception.BaseException;

import java.util.List;

/**
 * @author yfdai
 * @date 2015-3-19
 */
public interface FlightOrderService {

  List<FlightOrderResponseDto> searchFlightOrders(int userId, SearchFlightOrderCriteria sc);
  CommonDto<FlightOrderResponseDto> searchFlightOrders2(int userId, SearchFlightOrderCriteria sc);

  FlightOrderResponseDto getFlightOrderDetail(int userId, int id) throws BaseException;

  FlightOrderResponseDto getFlightOrderDetailByOrderNo(int userId, String orderNo) throws BaseException;

  /**
   * 创建机票订单
   * @param userId 当前用户id
   * @param dto FlightOrderRequestDto对象
   * @return 运行结果
   * @throws BaseException 抛出的意外
   */
  JsonResult createFlightOrder(int userId, FlightOrderRequestDto dto) throws BaseException;

  /**
   * 为机票订单付款
   * @param userId 用户id
   * @param id 订单id
   */
  JsonResult payFlightOrder(int userId, int id) throws BaseException;

  /**
   * 提交订单开票
   */
  JsonResult submitFlightOrder(int userId, int orderId);

  /**
   * 审批订单
   *     //判断审批人是否有权审批
   *     //1.是指定的审批人
   *     //2.如果不是，就是部门审批人
   *     //3.如果不是，就是主账户
   *     //4.都不是，提示无权审批
   * @param denyCode 0-同意；其它-不同意
   * @param denyReason 不同意的原因，不同意时必填
   */
  JsonResult approveFlightOrder(int userId, int orderId, int denyCode, String denyReason);

  /**
   * 根据授权码获取订单详情
   * @param id 订单id
   * @param authCode 授权码
   * @param mobile 手机号（暂时无用，发送短信时带的电话号码，以后可以考虑根据这个电话号码自动登录）
   * @param ip ip地址
   */
  FlightOrderResponseDto getFlightOrderDetailByAuthCode(int id, String authCode, String mobile, String ip);

}
